Este conjunto de dados foi simulado e disponibilizado por Ludovic Benistant para o site Kaggle. Fonte: Kaggle - Ludovic Benistant - Hr Analytics
Atributos:
Objetivo O objetivo deste projeto é explorar as variáveis do conjunto de dados hr que podem auxiliar na identificação dos fatores que levaram alguns funcionários a deixarem a empresa. Durante a investigação estas perguntas serão respondidas:
## [1] "satisfaction_level" "last_evaluation"
## [3] "number_project" "average_montly_hours"
## [5] "time_spend_company" "Work_accident"
## [7] "left" "promotion_last_5years"
## [9] "sales" "salary"
** Visão Geral dos dados**
Sumário das informações:
## satisfaction_level last_evaluation number_project average_montly_hours
## Min. :0.0900 Min. :0.3600 Min. :2.000 Min. : 96.0
## 1st Qu.:0.4400 1st Qu.:0.5600 1st Qu.:3.000 1st Qu.:156.0
## Median :0.6400 Median :0.7200 Median :4.000 Median :200.0
## Mean :0.6128 Mean :0.7161 Mean :3.803 Mean :201.1
## 3rd Qu.:0.8200 3rd Qu.:0.8700 3rd Qu.:5.000 3rd Qu.:245.0
## Max. :1.0000 Max. :1.0000 Max. :7.000 Max. :310.0
##
## time_spend_company Work_accident left
## Min. : 2.000 Min. :0.0000 Min. :0.0000
## 1st Qu.: 3.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median : 3.000 Median :0.0000 Median :0.0000
## Mean : 3.498 Mean :0.1446 Mean :0.2381
## 3rd Qu.: 4.000 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :10.000 Max. :1.0000 Max. :1.0000
##
## promotion_last_5years sales salary
## Min. :0.00000 sales :4140 high :1237
## 1st Qu.:0.00000 technical :2720 low :7316
## Median :0.00000 support :2229 medium:6446
## Mean :0.02127 IT :1227
## 3rd Qu.:0.00000 product_mng: 902
## Max. :1.00000 marketing : 858
## (Other) :2923
Os dados são consistentes e analisando o valor mínimo, médio, mediana e valor máximo, não foi possível encontrar outliers.
Vamos conferir qual a estrutura dos dados, e se necessário alterar alguns tipos para auxiliar a análise.
str(hr)
## 'data.frame': 14999 obs. of 10 variables:
## $ satisfaction_level : num 0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...
## $ last_evaluation : num 0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...
## $ number_project : int 2 5 7 5 2 2 6 5 5 2 ...
## $ average_montly_hours : int 157 262 272 223 159 153 247 259 224 142 ...
## $ time_spend_company : int 3 6 4 5 3 3 4 5 5 3 ...
## $ Work_accident : int 0 0 0 0 0 0 0 0 0 0 ...
## $ left : int 1 1 1 1 1 1 1 1 1 1 ...
## $ promotion_last_5years: int 0 0 0 0 0 0 0 0 0 0 ...
## $ sales : Factor w/ 10 levels "accounting","hr",..: 8 8 8 8 8 8 8 8 8 8 ...
## $ salary : Factor w/ 3 levels "high","low","medium": 2 3 3 2 2 2 2 2 2 2 ...
O conjunto de dados é composto por 14.999 observações e 10 variáveis. Não tem nenhuma variável que seja uma identificação única do colaborador, então vamos considerar que cada registro corresponde a uma pessoa, sem repetição.
As variáveis sales e salary são do tipo factor, vou criar duas variáveis não categoricas baseadas nelas. Essas duas variáveis serão utilizadas posteriormente no cálculo da correlação.
# Cria variável salary_le, versão numéricas de salary
hr$salary_le = c("high"=0, "low"=1, "medium"=2)[as.numeric(hr$salary)]
# Cria variável sales_le, versão numéricas de sales
hr$sales_le = c("accounting"=0, "hr"=1, "IT"=2, "management"=3, "marketing"=4, "product_mng"=5, "RandD"=6, "sales"=7, "support"=8, "technical"=9)[as.numeric(hr$sales)]
O nível de satisfação do funcionário será agrupado em três níveis: SIM, NÂO e Satisfação REGULAR.
# Cria novo campo satisfied no conjunto de dados hr
hr$satisfied <- as.factor(ifelse(hr$satisfaction_level<=.40, "NAO", ifelse(hr$satisfaction_level<=.70, "REGULAR", "SIM")))
Conferindo os campos criados:
table(hr$salary_le)
##
## 0 1 2
## 1237 7316 6446
table(hr$sales_le)
##
## 0 1 2 3 4 5 6 7 8 9
## 767 739 1227 630 858 902 787 4140 2229 2720
table(hr$satisfied)
##
## NAO REGULAR SIM
## 3124 5577 6298
Será que existem valores núlos? Vamos percorrer todas as variáveis somando todos os valores nulos.
# Verifica o total de NA em cada campo
for (i in 1:9) {
print (paste(names(hr[i]) , sum(is.na(hr[i])), sep="="))
next
}
## [1] "satisfaction_level=0"
## [1] "last_evaluation=0"
## [1] "number_project=0"
## [1] "average_montly_hours=0"
## [1] "time_spend_company=0"
## [1] "Work_accident=0"
## [1] "left=0"
## [1] "promotion_last_5years=0"
## [1] "sales=0"
O conjunto de dados está completamente preenchido e não será necessário excluir o valores nulos através do comando abaixo:
Em média as pessoas trabalham 200 horas mensalmente, a maioria das pessoas trabalha entre 130 e 270 horas. No Brasil trabalha-se aproximadamente 220 horas mensais, então é bem razoável a distribuição do tempo.
A empresa tem alguns colaboradores que trabalham por mais de 7 anos, mas o mais comum é passar entre 2 e 4 anos.
Para facilitar a comparação, agrupei as informações entre contratados e demitidos. O fato de ter recebido ou não promoção nos últimos anos não variou de maneira significativa entre os dois grupos.
O maior grupo de satisfeitos está entre os que ainda estão contratados, apesar de terem colaboradores com uma satisfação baixa, o maior pico de insatisfeitos está entre os desligados. Alguns funcionários com um nível alto de satisfação deixaram a empresa, e isto será investigado no decorrer deste projeto.
A distribuição da nível de satisfação e da nota da última avaliação é bem similar nos dois grupos. Uma observação interessante é que colaboradores bem avaliados deixaram a empresa.
# Agrupa o total de resultados por departamento
Funcionarios_departamento <- aggregate(hr$sales, by=list(hr$sales) ,FUN = length)
formattable(Funcionarios_departamento, list(
x = color_tile("white", "#6699CC")))
| Group.1 | x |
|---|---|
| accounting | 767 |
| hr | 739 |
| IT | 1227 |
| management | 630 |
| marketing | 858 |
| product_mng | 902 |
| RandD | 787 |
| sales | 4140 |
| support | 2229 |
| technical | 2720 |
Os departamentos support, technical e sales são os mais populosos da empresa, com 9089 colaboradores no total.
A estrutura de dados é composta por 14.999 observações, 10 variáveis importadas com o arquivo original, mais duas várias criadas para contabilização.
A variável left representa os colaboradores que ainda estão na empresa com o valor 0 e 1 para colaboradores desligados.
A maioria das variáveis são númericas e duas são categóricas representadas por fatores: sales com 10 níveis e salary com 3.
A principal variável de interesse do conjunto é left, que informa se o colaborador está na empresa ou se foi desligado. A variável com o nível de satisfação (satisfaction_level) também será foco da análise, uma vez que, a correlação das outras variáveis com ela podem ajudar a compreender a os motivos que levaram as pessoas a deixarem a empresa.
promotion_last_5years: O total de promoções recebidas (promotion_last_5years) pode gerar uma insatisfação no colaborador se ele supor que não foi reconhecido; time_spend_company: O tempo passado numa empresa pode gerar uma necessidade de sair da empresa, nem sempre por uma causa negativa, mas pela vontade de viver novos desafios; salary: Essa variável é categorica com os valores baixo, médio e alto. A relação da remuneração com o satisfação e a decisão de saída será avaliado, apesar de várias pesquisas indicarem que o salario nem sempre é um grande influenciador nesta decisão. É possível que variáveis como número de promoções e nota recebida na ultima avaliação pesem mais na sensação de ter o trabalho reconhecido e este é um fator importante. number_project: Essa variável não diz muita coisa, mas podemos supor que pessoas com mais números de projetos eram mais engajadas? sales: Será que tem um departamento problemático?
O conjunto de dados estava bem consistente, as alterações realizadas foram para adaptar as informações para análise. Salary e Sales são do tipo factor, para elas criei duas novas variaveis, Salary_le e Sales_le para representa-las numericamente. É uma especíe de versão LabelEncoder de cada uma delas.
Foi criada a variável satisfied, do tipo factor com 3 níveis: SIM, NAO e REGULAR. O objetivo desse campo é facilitar na visualização das faixas de satisfação dos colaboradores. As faixas definidas para este projeto sem qualquer compromisso com valores padrões de um departamento de recursos humanos.
Pesquisei variaveis NA, mas o grupo não tinha nenhuma. Variáveis sem conteúdo não foram pesquisadas porque na importação do arquivo eu atribui por padrão o valor NA para elas (na.strings=c(“”,“NA”)), então, automaticamente ao pesquisar por NA, eu já estava pesquisando pelas vazias.
Em alguns gráficos, transformei a variável left em factor para auxiliar o agrupamento dos dados em 0 e 1, e não na média destes dois números.
Observando o sumário das variáveis, os dados são consistentes e sem outliers, portanto não foi necessário manipular alguns valores.
Agora que já conhecemos um poucos as variáveis do conjunto de dados, vamos verificar como elas se relacionam. Nesta seção tentaremos responder as perguntas descritas no ínicio do trabalho.
** Os colaboradores que saíram recebiam baixo salário **
Entre as pessoas que sairam temos todas as faixas de salário, o volume de pessoas com salário alto é menor e não está distribuido em todos os departamentos. Mas o gráfico já é suficiente para responder a pergunta, as pessoas que sairam recebiam, em sua maioria, um salário baixo ou médio.
Investigando um pouco mais o departamento, vamos ver a proporção de pessoas que sairam de cada uma deles.
# Cria um subgrupo de dados com a proporção dos colaboradores que deixaram cada departamento.
prop_left_sales <- data.frame(round(prop.table(table(hr$sales,hr$left), 1)*100,0))
# Altera o nome das colunas
colnames(prop_left_sales) <- c("Departamento", "left", "Frequencia")
# Transforma o conteúdo da variável left em coluna, e demonstra o valor de Freq para cada uma delas.
formattable(cast(prop_left_sales, Departamento ~ left, value="Frequencia"), list(
"1" = color_tile("white", "#6699CC")))
| Departamento | 0 | 1 |
|---|---|---|
| accounting | 73 | 27 |
| hr | 71 | 29 |
| IT | 78 | 22 |
| management | 86 | 14 |
| marketing | 76 | 24 |
| product_mng | 78 | 22 |
| RandD | 85 | 15 |
| sales | 76 | 24 |
| support | 75 | 25 |
| technical | 74 | 26 |
Os departamentos de gerencia (management) e pesquisa e desenvolvimento (RandD) tiveram a menor evasão de colaboradores. Os outros departamentos tiveram entre 22 e 29%. Abaixo podemos ver esta distribuição:
Quando comparados, as pessoas que deixaram a empresa obtiveram uma mediana maior, principalmente no departamento RandD. No departamento de marketing e hr, as pessoas trabalharam entre 150 e 250h mas com uma mediana menor.
media_hora_departamento <- aggregate(hr$average_montly_hours, by=list(hr$sales, hr$left ) ,FUN = mean)
colnames(media_hora_departamento) <- c("Departamento", "left", "Media")
media_hora_departamento <- cast(media_hora_departamento, Departamento ~ left, value="Media")
colnames(media_hora_departamento) <- c("Departamento", "Contratado", "Desligado")
formattable(media_hora_departamento, list(
Desligado = color_tile("gray", "red")))
| Departamento | Contratado | Desligado |
|---|---|---|
| accounting | 199.0373 | 207.0294 |
| hr | 199.2500 | 197.3070 |
| IT | 198.8868 | 213.8498 |
| management | 200.2338 | 207.2637 |
| marketing | 198.8885 | 200.9901 |
| product_mng | 197.7656 | 207.7879 |
| RandD | 198.9520 | 210.9752 |
| sales | 199.5717 | 205.0414 |
| support | 199.1410 | 205.6360 |
| technical | 198.4711 | 214.1836 |
Com exceção do departamento de recursos humanos (hr), os colaboradores que se desligaram da empresa trabalharam em média mais do que os dos outros departamentos, sempre mais de 200 horas por mês. Foi realçado em vermelho os casos em que o grupo de desligados trabalhou mais.
Sabemos que os colaboradores que se desligaram trabalharam por mais horas, será que eles conseguiram ficar por muito tempo na empresa?
Este gráfico trás uma informação interessante, de maneira geral as pessoas não saem da empresa no primeiro ano de trabalho. Os que saem, são os que trabalharam em média mais tempo por mês.O grupo de maior volume é formado por colaboradores que atuam na empresa a mais de 7 anos.
Que coisa, as pessoas que deixam a empresa não chegam a completar 5 anos de trabalho, os que permanecem na empresa chegaram a trabalhar por 10 anos.
Nós vemos uma insatisfação nos colaboradores que deixam a empresa no 3º ou 4º anos, aparentemente se você passa por essa fase, o nível de satisfação cresce, ficando acima de 0.75, mas mesmo assim, os colaboradores saem entre o 5º e 6º, e nunca atingem o 7º ano. O ideal para este caso é que tivessemos um histórico dos níveis de satisfação destas pessoas, ano após ano, assim conseguiriamos projetar em que anos a insatisfação aumenta e diminui.
será que há uma variação similar na nota de avaliação deste colaborador durante os anos trabalhados? Para descobrir isso, vamos ver a nota de avaliação por ano trabalhado:
O 3º ano parece um pouco crítico, não? Vimos no gráfico anterior que muitos dos que saíram demonstraram um nível de satisfação baixo, e neste gráfico percebemos que no 3º a maioria dos desligados receberam uma nota baixa na avaliação. Pode ser motivado por uma avaliação mais rigorosa da empresa após de 3 anos de trabalho, pode existir uma política específica para este período.
Do 4º ano em diante os desligados receberam em sua maioria uma boa nota na avaliação, em geral acima de 0.8.
Ter mais tempo de empresa não significa que o salário será melhor. Do sexto para o 10º ano a faixa salarial que prevalece é a média, mas como os que sairam não chegaram a completar 7 anos de trabalho, não é possível verificar se isso se repetiria para eles.
Mesmo tendo sofrido acidente de trabalho, os colaboradores permanecem na empresa.
Quem tem mais projetos trabalha mais? Sim. Na média, quem teve mais projetos trabalhou mais horas mensais. Faz bastante sentido que seja assim.
Através do cálculo da correlação entre as variáveis vamos verificar se os valores confirmam a impressão que temos dos dados até o momento.
## satisfaction_level last_evaluation number_project
## satisfaction_level 1.00000000 0.105021214 -0.142969586
## last_evaluation 0.10502121 1.000000000 0.349332589
## number_project -0.14296959 0.349332589 1.000000000
## average_montly_hours -0.02004811 0.339741800 0.417210634
## time_spend_company -0.10086607 0.131590722 0.196785891
## Work_accident 0.05869724 -0.007104289 -0.004740548
## left -0.38837498 0.006567120 0.023787185
## promotion_last_5years 0.02560519 -0.008683768 -0.006063958
## salary_le 0.01175416 0.013964915 0.009671757
## sales_le 0.01226082 0.006809655 0.019077888
## average_montly_hours time_spend_company
## satisfaction_level -0.020048113 -0.100866073
## last_evaluation 0.339741800 0.131590722
## number_project 0.417210634 0.196785891
## average_montly_hours 1.000000000 0.127754910
## time_spend_company 0.127754910 1.000000000
## Work_accident -0.010142888 0.002120418
## left 0.071287179 0.144822175
## promotion_last_5years -0.003544414 0.067432925
## salary_le 0.007081960 -0.003086256
## sales_le 0.007722204 -0.034825154
## Work_accident left promotion_last_5years
## satisfaction_level 0.058697241 -0.388374983 0.025605186
## last_evaluation -0.007104289 0.006567120 -0.008683768
## number_project -0.004740548 0.023787185 -0.006063958
## average_montly_hours -0.010142888 0.071287179 -0.003544414
## time_spend_company 0.002120418 0.144822175 0.067432925
## Work_accident 1.000000000 -0.154621634 0.039245435
## left -0.154621634 1.000000000 -0.061788107
## promotion_last_5years 0.039245435 -0.061788107 1.000000000
## salary_le -0.002505606 -0.001293717 -0.001318425
## sales_le 0.011323553 0.009935740 -0.036953987
## salary_le sales_le
## satisfaction_level 0.011754160 0.012260815
## last_evaluation 0.013964915 0.006809655
## number_project 0.009671757 0.019077888
## average_montly_hours 0.007081960 0.007722204
## time_spend_company -0.003086256 -0.034825154
## Work_accident -0.002505606 0.011323553
## left -0.001293717 0.009935740
## promotion_last_5years -0.001318425 -0.036953987
## salary_le 1.000000000 0.016429857
## sales_le 0.016429857 1.000000000
# Gera correlação e gráficos entre as variáveis numericas selecionadas
hr_ggpairs = hr[,c(1,2,3,4,5,6,7,8,11,12)]
g <- ggpairs(hr_ggpairs )
# Imprime a matriz com todos os gráficos em um arquivo svg. Retire o eval=FALSE para executar esta célula.
jpeg(filename = "gg.jpg")
print(g)
dev.off()
ggpair
Para o contexto, a correlação entre left e satisfaction_level é a mais forte, mesmo não sendo tão forte de maneira geral.
with(hr, cor.test(left, satisfaction_level, method = 'pearson'))
##
## Pearson's product-moment correlation
##
## data: left and satisfaction_level
## t = -51.613, df = 14997, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4018809 -0.3747001
## sample estimates:
## cor
## -0.388375
A variável left e os anos de trabalho de na empresa variam com o passar do tempo. O 3º ano parece ser o mais crítico, onde são registrados níveis de satisfação baixos, nos anos seguintes há um aumento e não foi registrada nenhuma saída após o colaborador completar 7 anos de casa.
As notas recebidas na avaliação também variam com o passar do tempo. No terceiro ano é registrado o maior volume de notas baixas entre os que deixaram a empresa, e os outros com mais tempo de trabalho, receberam boas notas em suas avaliações.
Boa parte dos que tiveram acidente de trabalho durante sua jornada permaneceram na empresa, há uma correlação muito fraca entre essas variáveis de -0.1546.
A medida que o número de projetos aumenta, também aumenta o média de horas trabalhadas por mês. E essa correlação é a mais forte do grupo sendo 0.4172.
Trabalhar por anos na empresa não está relacionado a um aumento da faixa de salário. Para aprofundar esta análise seria necessário saber o valor do salário recebido porque pode ter havido um aumento no valor, sem que isso significasse uma troca na faixa salarial (Baixo, Médio e ALto).
O relacionamento mais forte foi encontrado entre as variáveis número de projetos e média de horas trabalhadas. Não é claro se o total de projetos trabalhados corresponde a um período, por exemplo, são os projetos trabalhados no mês, no ano, desde a contratação? Supondo que seja mensal, faria todo sentido dizer que quem executou mais projetos, consequentemente pode ter tido que trabalhar mais horas no mês. Saber o nível de complexidade do projeto nos auxiliaria na interpretação da relação da quantidade de projetos e o tempo necessários para executá-lo.
No que interessa a esta análise, que é investigar o porque alguns colaboradores deixaram a empresa, a variável nível de satisfação é a que tem a correlação mais forte com left, indicador de desligamento. Obteve-se o valor de correlação igual a -0.388375, ou seja, 40% dos desligamentos poderiam ser explicados pelo nível de satisfação, mas isso não significa que seja a causa dele.
O primeiro passo é criar um dataset com os dados dos que vamos chamar de bons colaboradores que atendem aos determinados critérios: 1. Na última avaliação tiveram nota superior a 0.7; 2. Trabalharam na empresa por mais de 4 anos; 3. Trabalharam em mais de 5 projetos; 4. No mês, em média, trabalharam de 250 horas
## [1] 961
Não é nada surpreendente que as pessoas tenham saido da empresa, elas trabalharam mais pela mesma faixa de salário. Claro que para uma análise mais efetiva destas variáveis, seria necessário saber por exemplo, na faixa de altos salários se os valores são os mesmos, ou se os que trabalhavam mais recebiam uma quantia maior, mesmo sendo caracterizado como a mesma faixa.
Vamos fazer a mesma análise só que observando o total de projetos x horas trabalhadas.
Bem, esse gráfico nos leva às seguintes observações: 1. Nesta perspectiva os desligados continuam trabalhando por mais horas que os contratados; 2. As horas mensais trabalhadas entre os contratados varia quase que de maneira imperceptível independente do número de projetos. As pesssoas que trabalharam em 6 projetos, trabalharam entre 150 e 250 horas mensais da mesma forma que os que trabalharam em 2 projetos; 3. As pessoas que deixaram a empresa trabalharam mais horas por mês que os que ainda estão contratados. Para este grupo, mais projetos significou mais trabalho; 4. Os demitidos foram os únicos que trabalharam em 6 projetos ou mais.
** Será que é perceptível a instatisfação do funcionário? **
O que eu quero saber é se é a percepção que o colaborador tem de sí, ou seja, seu nível de satisfação, se relaciona de alguma forma com a forma como o empregador percebe o colaborador e atribui uma pontuação para isso através da avaliação.
## [1] 4605
nrow(hr_func_medianos %>% filter(left==1))
## [1] 1551
nrow(hr_func_bons %>% filter(left==1))
## [1] 851
cast(hr_func_bons, satisfied ~ left, value = "salary")
## Aggregation requires fun.aggregate: length used as default
## satisfied 0 1
## 1 NAO 59 845
## 2 REGULAR 28 3
## 3 SIM 23 3
table(hr$satisfied)
##
## NAO REGULAR SIM
## 3124 5577 6298
by(hr$left==1, hr$satisfied, summary)
## hr$satisfied: NAO
## Mode FALSE TRUE NA's
## logical 1389 1735 0
## --------------------------------------------------------
## hr$satisfied: REGULAR
## Mode FALSE TRUE NA's
## logical 4674 903 0
## --------------------------------------------------------
## hr$satisfied: SIM
## Mode FALSE TRUE NA's
## logical 5365 933 0
m1 <- lm(left ~ satisfaction_level, data = hr)
m2 <- update(m1, ~ . + time_spend_company)
m3 <- update(m2, ~ . + average_montly_hours)
m4 <- update(m3, ~ . + number_project)
m5 <- update(m4, ~ . + promotion_last_5years)
mtable(m1, m2, m3, m4)
##
## Calls:
## m1: lm(formula = left ~ satisfaction_level, data = hr)
## m2: lm(formula = left ~ satisfaction_level + time_spend_company,
## data = hr)
## m3: lm(formula = left ~ satisfaction_level + time_spend_company +
## average_montly_hours, data = hr)
## m4: lm(formula = left ~ satisfaction_level + time_spend_company +
## average_montly_hours + number_project, data = hr)
##
## ====================================================================
## m1 m2 m3 m4
## --------------------------------------------------------------------
## (Intercept) 0.646*** 0.526*** 0.445*** 0.501***
## (0.009) (0.012) (0.017) (0.018)
## satisfaction_level -0.665*** -0.647*** -0.646*** -0.665***
## (0.013) (0.013) (0.013) (0.013)
## time_spend_company 0.031*** 0.029*** 0.033***
## (0.002) (0.002) (0.002)
## average_montly_hours 0.000*** 0.001***
## (0.000) (0.000)
## number_project -0.031***
## (0.003)
## --------------------------------------------------------------------
## R-squared 0.2 0.2 0.2 0.2
## adj. R-squared 0.2 0.2 0.2 0.2
## sigma 0.4 0.4 0.4 0.4
## F 2663.9 1450.7 985.3 773.5
## p 0.0 0.0 0.0 0.0
## Log-likelihood -7254.4 -7154.2 -7131.3 -7073.6
## Deviance 2310.4 2279.7 2272.8 2255.4
## AIC 14514.8 14316.3 14272.6 14159.3
## BIC 14537.7 14346.8 14310.7 14205.0
## N 14999 14999 14999 14999
## ====================================================================
m1 <- lm(satisfaction_level ~ salary, data = hr)
m2 <- update(m1, ~ . + time_spend_company)
m3 <- update(m2, ~ . + average_montly_hours)
m4 <- update(m3, ~ . + number_project)
m5 <- update(m4, ~ . + promotion_last_5years)
mtable(m1, m2, m3, m4, m5)
##
## Calls:
## m1: lm(formula = satisfaction_level ~ salary, data = hr)
## m2: lm(formula = satisfaction_level ~ salary + time_spend_company,
## data = hr)
## m3: lm(formula = satisfaction_level ~ salary + time_spend_company +
## average_montly_hours, data = hr)
## m4: lm(formula = satisfaction_level ~ salary + time_spend_company +
## average_montly_hours + number_project, data = hr)
## m5: lm(formula = satisfaction_level ~ salary + time_spend_company +
## average_montly_hours + number_project + promotion_last_5years,
## data = hr)
##
## ================================================================================
## m1 m2 m3 m4 m5
## --------------------------------------------------------------------------------
## (Intercept) 0.637*** 0.703*** 0.709*** 0.749*** 0.747***
## (0.007) (0.009) (0.011) (0.012) (0.012)
## salary: low/high -0.037*** -0.041*** -0.041*** -0.040*** -0.037***
## (0.008) (0.008) (0.008) (0.008) (0.008)
## salary: medium/high -0.016* -0.019* -0.018* -0.017* -0.016*
## (0.008) (0.008) (0.008) (0.008) (0.008)
## time_spend_company -0.018*** -0.017*** -0.014*** -0.014***
## (0.001) (0.001) (0.001) (0.001)
## average_montly_hours -0.000 0.000*** 0.000***
## (0.000) (0.000) (0.000)
## number_project -0.030*** -0.030***
## (0.002) (0.002)
## promotion_last_5years 0.044**
## (0.014)
## --------------------------------------------------------------------------------
## R-squared 0.0 0.0 0.0 0.0 0.0
## adj. R-squared 0.0 0.0 0.0 0.0 0.0
## sigma 0.2 0.2 0.2 0.2 0.2
## F 19.0 66.9 50.4 96.3 81.9
## p 0.0 0.0 0.0 0.0 0.0
## Log-likelihood -387.8 -307.0 -306.7 -169.8 -164.8
## Deviance 924.8 914.9 914.8 898.3 897.7
## AIC 783.6 624.0 625.3 353.5 345.6
## BIC 814.1 662.1 671.0 406.9 406.5
## N 14999 14999 14999 14999 14999
## ================================================================================
Quando o nível de satisfação de todo o grupo é análisado fica evidente uma distribuição bem diferente entre os que permanecem na empresa e os que saem. Os colaboradores que ficaram tem uma satisfação de regular a satisfeito, com um volume pequeno de colaboradores insatisfeitos. Entre os que saíram o grupo de insatisfeitos é o maior, demonstrando a correlação observada entre elas, mas não é possível afirmar que a insatisfação seja a causa de uma demissão por exemplo.
Sim, foram criados dois modelos, um para left e outro para satisfaction_level.
No 1º foi criado um modelo linear de regressão para verificar a relação entre left e as variáveis satisfaction_level, time_spend_company, average_montly_hours, number_project. As variáveis foram selecionadas com base no valor de correlação encontrada entre elas. O resultado recebido foi um pouco decepcionante porque o r² mesmo ajustado só consegue explicar 20% da variável dependente left. Outro valor a ser observado pelo modelo é que há uma alta significancia entre as variáveis demonstrado pelo valor de p=0.
No 2º modelo o objetivo do modelo linear de regressão foi relacionar o nível de satisfação com a outras variáveis. Se não estar satisfeito pode estar relacionado, sem ser a causa, com a saída do funcionário, então o que poderia estar relacionado com a baixa satisfação dele? No modelo criado com a faixa de salário, o tempo trabalhado na empresa e a média mensal de horas trabalhadas tem o menor valor de r²=0, e as variáveis com o número de projetos trabalhados e a existência de promoção nos ultimos anos demonstraram uma correlação baixa de ionado com a baixa satisfação dele? No modelo criado a nota da última avaliação, o tempo trabalhado na empresa e a média mensal de horas trabalhadas tem um valor de r²=0.1.
Os funcionários que mais trabalham são os mais bem pagos?
## Warning: Removed 130 rows containing missing values (geom_point).
Para minha surpresa, não. Entre os que não fazem mais parte da empresa, os com alto salário trabalharam em menos projetos e obtiveram uma nota baixa na avaliação. Os com boa nota na avaliação (acima de 0.7) trabalharam em mais de 4 projetos. Os com nota inferior a 0.6 trabalharam em sua maioria em 2 projetos. Os contratados tem uma distribuição mais uniforme da satisfação e a maior parte trabalha de 3 a 5 projetos.
Intereçã
n <- nrow(hr)
idx <- sample(n, n * .66)
# Make a few modications
hr %>%
mutate(
left = factor(left, labels = c("Remain", "Left")),
salary = ordered(salary, c("low", "medium", "high"))
) ->
d
train <- d[idx, ]
test <- d[-idx, ]
tree <- rpart(left ~ ., data = train)
res <- predict(tree, test)
auc(as.numeric(test$left) - 1, res[, 2])
## Area under the curve: 0.9694
The AUC has an important statistical property: the AUC of a classifier is equivalent to the probability that the classifier will rank a randomly chosen positive instance higher than a randomly chosen negative instance. [Fawcett]
rpart.plot(tree, type = 2, fallen.leaves = F, cex = 1, extra = 2)